package com.yifeng.servlet;

import com.yifeng.common.Result;
import com.yifeng.factory.ServiceFactory;
import com.yifeng.model.User;
import com.yifeng.service.UserService;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/*
负责人：倾枫

功能：用户注册接口，处理用户注册请求，支持普通用户和管理员注册

参数：无

返回值：无
*/
/**
 * 负责人：
 * 功能：处理用户注册请求，接收 username、password、role、inviteCode 参数，
 *       调用 UserService 完成普通用户或管理员注册
 */
@WebServlet("/register")
public class RegisterServlet extends BaseServlet {

    /*
    负责人：倾枫

    功能：处理HTTP请求的核心方法，实现用户注册功能

    参数：req - HTTP请求对象, resp - HTTP响应对象

    返回值：无
    */
    @Override
    protected void doHandle(HttpServletRequest req, HttpServletResponse resp) throws IOException {

        //读取JSON数据
        // 2. 从请求体中读取 JSON 并解析为 user 对象
        User user = readJsonBody(req, User.class);

        // 3. 校验 DTO 是否为空或字段缺失
        if (user == null || user.getUserName() == null || user.getPassword() == null || user.getRole() == null) {
            writeJson(resp, Result.fail(400,"参数缺失"));
            return;
        }

        //获取前端参数
        String inviteCode = null;
        if(user.getRole().equals("admin")){
            inviteCode = user.getInviteCode();
        }

        /*// 获取表单参数
        String userName = req.getParameter("username");
        String password = req.getParameter("password");
        String role = req.getParameter("role");
        String inviteCode = req.getParameter("inviteCode");

        //校验 DTO 是否为空或字段缺失
        if (userName == null || password == null || role == null || userName.isEmpty() || password.isEmpty() || role.isEmpty()) {
            fail(resp, "参数缺失");
            return;
        }
        User user = new User();
        user.setUserName(userName);
        user.setPassword(password);
        user.setRole(role);
        user.setInviteCode(inviteCode);*/



        // 4. 通过工厂获取 Service 实例（解耦，便于维护）
        UserService userService = ServiceFactory.getUserService();

        // 调用注册服务
        Result registerResult = userService.register(user.getUserName(), user.getPassword(), user.getRole(), inviteCode);

        // 返回 JSON 响应
        if(registerResult.getCode() != 200){
            fail(resp, registerResult.getMessage());
            return;
        }
        writeJson(resp, registerResult);

    }
}